package com.ccc.boot.util;

import com.ccc.boot.constant.CommonConstant;
import org.apache.commons.codec.binary.Base64;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * Base64转换工具类
 *
 * @author superC
 * @version 0.1.0
 * @date 2022/4/7
 */

public class Base64Utils {

    /**
     * 获取图片的base64编码
     *
     * @param fileBytes 文件流
     * @return {@link String}   base64编码后的字符串
     * @date 2022/4/7 13:27
     * @author superC
     */
    public static String getImageBase64(byte[] fileBytes) {
        return CommonConstant.IMAGE_BASE_PREFIX + bytesToBase64(fileBytes);
    }

    /**
     * 获取文件的base64编码
     *
     * @param fileBytes 文件流
     * @param prefix    base64前缀
     * @return {@link String}   base64编码后的字符串
     * @date 2022/4/7 13:27
     * @author superC
     */
    public static String getFileBase64(byte[] fileBytes, String prefix) {
        return prefix + bytesToBase64(fileBytes);
    }

    /**
     * byte[]转base64
     *
     * @param fileBytes 文件流
     * @return {@link String}   base64编码后的字符串
     * @date 2022/4/7 13:27
     * @author superC
     */
    public static String bytesToBase64(byte[] fileBytes) {
        return Base64.encodeBase64String(fileBytes);
    }

    /**
     * base64加密
     *
     * @param fileBytes 文件流
     * @return {@link byte[]}
     * @date 2022/4/7 13:26
     * @author superC
     */
    public static byte[] encodeBase64(byte[] fileBytes) {
        return Base64.encodeBase64(fileBytes);
    }

    /**
     * base64字符串转byte[]
     *
     * @param base64Str base64编码后的字符串
     * @return {@link byte[]}       文件流
     * @date 2022/4/7 16:38
     * @author superC
     */
    public static byte[] base64StringToBytes(String base64Str) {
        return Base64.decodeBase64(base64Str);
    }

    /**
     * InputStream转换为byte[]
     *
     * @param inStream
     * @return
     * @throws IOException
     */
    public static final byte[] streamToBytes(InputStream inStream) throws IOException {
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[1024];
        int rc = 0;
        while ((rc = inStream.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        byte[] in2b = swapStream.toByteArray();
        return in2b;
    }

}